package cn.hutool.poi.excel.cell.data;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

/**
 * 工作簿的数据类
 * @author 徐明龙 XuMingLong 2021-11-16
 */
public class WorkBookData {

	/**
	 * 要填充的模版的Sheet的下标 （从0开始）
	 * @author 徐明龙 XuMingLong 2021-11-16
	 */
	private int templateSheetIndex;

	/**
	 * Sheet的数据列表
	 * @author 徐明龙 XuMingLong 2021-11-16
	 */
	private List<SheetData> sheetDataList;


	/**
	 * 对整个表格有效的固定占位符的数据映射，如果同一个占位变量同时设置了WorkBook和Sheet，则优先使用Sheet的。
	 * @author 徐明龙 XuMingLong 2021-11-16
	 */
	private Map<String,String> fixedDataMap;

	/**
	 * 默认的构造函数
	 * @author 徐明龙 XuMingLong 2021-11-16
	 */
	public WorkBookData(){
		this(0);
	}

	/**
	 * 指定要填充的模版的Sheet的下标的构造函数
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param templateSheetIndex 要填充的模版的Sheet的下标 （从0开始）
	 */
	public WorkBookData(int templateSheetIndex) {
		this.templateSheetIndex = templateSheetIndex;
		this.sheetDataList = new LinkedList<>();
		this.fixedDataMap = new HashMap<>();
	}

	/**
	 * 获取要填充的模版的Sheet的下标
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @return int 要填充的模版的Sheet的下标 （从0开始）
	 */
	public int getTemplateSheetIndex() {
		return templateSheetIndex;
	}

	/**
	 * 设置要填充的模版的Sheet的下标
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param templateSheetIndex 要填充的模版的Sheet的下标 （从0开始）
	 * @return void
	 */
	public void setTemplateSheetIndex(int templateSheetIndex) {
		this.templateSheetIndex = templateSheetIndex;
	}

	/**
	 * 获取Sheet的数据列表
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @return java.util.List<cn.hutool.poi.excel.cell.data.SheetData> Sheet的数据列表
	 */
	public List<SheetData> getSheetDataList() {
		return sheetDataList;
	}

	/**
	 * 设置Sheet的数据列表
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param sheetDataList Sheet的数据列表
	 * @return void
	 */
	public void setSheetDataList(List<SheetData> sheetDataList) {
		this.sheetDataList = sheetDataList;
	}

	/**
	 * 获取固定占位符的数据映射
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @return java.util.Map<java.lang.String,java.lang.String> 固定占位符的数据映射
	 */
	public Map<String, String> getFixedDataMap() {
		return fixedDataMap;
	}

	/**
	 *  设置固定占位符的数据映射
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param fixedDataMap  固定占位符的数据映射
	 * @return void
	 */
	public void setFixedDataMap(Map<String, String> fixedDataMap) {
		this.fixedDataMap = fixedDataMap;
	}

	/**
	 * 增加Sheet的数据
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param sheetData
	 * @return void
	 */
	public void addSheetData(SheetData sheetData){
		this.sheetDataList.add(sheetData);
	}

	/**
	 * 增加一个固定占位符的数据映射
	 * @author 徐明龙 XuMingLong 2021-11-16
	 * @param key 占位符
	 * @param value 值
	 * @return void
	 */
	public void addFixedDataMap(String key,String value){
		this.fixedDataMap.put(key, value);
	}

}
